import os

from fastapi.exceptions import HTTPException, RequestValidationError
from starlette import status
from starlette.requests import Request
from starlette.responses import JSONResponse

from api.application.utils.logs import get_logger

logger = get_logger(os.environ.get('APP_NAME'))


def global_http_exception_handler(request: Request, exc):
    """
    全局 HTTP 异常处理
    :param request: HTTP请求
    :param exc: 本次发生的异常对象
    :return:
    """

    # 使用日志记录异常
    logger.error(f'发生异常:{exc.detail}')

    return JSONResponse({
        'code': exc.status_code,
        'err_msg': exc.detail,
        'status': 'Failed'
    })


def global_request_exception_handler(request: Request, exc):
    """
    全局 校验 异常处理
    :param request: HTTP请求对象
    :param exc: 本次发生的异常对象
    :return:
    """

    # # 使用日志记录异常
    # logger.error(f'发生异常:{exc.detail}')

    return JSONResponse({
        'code': status.HTTP_404_NOT_FOUND,
        'err_msg': exc.errors()[0],
        'status': 'Failed'
    })


